
#include "sysctrl.h"
#include "gpio.h"
#include "peripheral.h"
#include "work.h"
#include "led.h"
#include "key.h"
#include "timer.h"
//#include "temp.h"
#include "btim.h"
#include "ddl.h"
// #include "iap.h"
#include "sysctrl.h"
#include "my_battery.h"
#include "my_debug.h"
#include "my_check_sleep.h"

extern uint8_t Beep_Time;
extern boolean_t ms10_f;

int main(void)
{
	App_Clock_Cfg();
	delay_ms(50);
	User_Init();
	App_Btimer_Init();
	App_LpUartPortCfg();
	System_ADCInit();
	System_PWMInit();
	Beep_Time = 0;

	printf("V0.0.5\r\n");
    while(1)
    {
        if(ms10_f)
		{
			ms10_f=0;
			Work_Handler();
			BAT_Handler();
			Charge_Handler();
			Halt_Handler();
			Beep_Handler();
//						IAP_Handler();		//跳转boot程序
			Key_Scan();					//按键检测
			Work_CountTime();		//工作定时
			LED_Handle();			//LED控制
//						Temp_Protect();		//温度保护
			DEBUG_Handler();	//debug
		}
    }
}

void User_Init()
{
		stc_gpio_init_t stcGpioInit = {0};
		
		SYSCTRL_PeriphClkEnable(SYSCTRL_PERICLK_PA);
		SYSCTRL_PeriphClkEnable(SYSCTRL_PERICLK_PB);
		SYSCTRL_PeriphClkEnable(SYSCTRL_PERICLK_PC);
		SYSCTRL_PeriphClkEnable(SYSCTRL_PERICLK_PD);
		
    SYSCTRL->CR3 = 0x5A5Au;
    SYSCTRL->CR3 = 0xA5A5u;
		SYSCTRL->CR1 |= 0x08;
		
		stcGpioInit.u32Mode = GPIO_MODE_INPUT|GPIO_MODE_EXTI;
    stcGpioInit.u32Pin  = USB_IN_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_NONE;
		stcGpioInit.u32ExtI = GPIO_EXTI_RISING;
    GPIO_Init(USB_IN_PORT,&stcGpioInit);
		
		stcGpioInit.u32Mode = GPIO_MODE_INPUT|GPIO_MODE_EXTI;
    stcGpioInit.u32Pin  = RX_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_UP;
		stcGpioInit.u32ExtI = GPIO_EXTI_FALLING;
    GPIO_Init(RX_PORT,&stcGpioInit);
		
	// 	EN_EMS_OFF;
	// 	stcGpioInit.u32Mode = GPIO_MODE_OUTPUT_PP;
    // stcGpioInit.u32Pin  = EN_EMS_PIN;
    // stcGpioInit.u32Pull = GPIO_PULL_NONE;
    // GPIO_Init(EN_EMS_PORT,&stcGpioInit);
	// adc 检测----
	GPIO_PB05_ANALOG_SET();
	stcGpioInit.u32Mode = GPIO_MODE_INPUT;
    stcGpioInit.u32Pin  = ADC_VBAT_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_NONE;
    GPIO_Init(ADC_VBAT_PORT,&stcGpioInit);
		
	GPIO_PD05_ANALOG_SET();
	stcGpioInit.u32Mode = GPIO_MODE_INPUT;
    stcGpioInit.u32Pin  = EMS_ISEN_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_NONE;
    GPIO_Init(EMS_ISEN_PORT,&stcGpioInit);

	stcGpioInit.u32Mode = GPIO_MODE_OUTPUT_PP;
	stcGpioInit.u32Pin  = EN_VBAT_PIN;
	stcGpioInit.u32Pull = GPIO_PULL_NONE;
	GPIO_Init(EN_VBAT_PORT,&stcGpioInit);
	EN_VBAT_ON;
		
	stcGpioInit.u32Mode = GPIO_MODE_INPUT_TTL;
    stcGpioInit.u32Pin  = STDBY_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_NONE;
    GPIO_Init(STDBY_PORT,&stcGpioInit);
		
	stcGpioInit.u32Mode = GPIO_MODE_INPUT_TTL;
    stcGpioInit.u32Pin  = STAT_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_NONE;
    GPIO_Init(STAT_PORT,&stcGpioInit);
		
	BUZZER_OFF;
	stcGpioInit.u32Mode = GPIO_MODE_OUTPUT_PP;
    stcGpioInit.u32Pin  = BUZZER_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_NONE;
    GPIO_Init(BUZZER_PORT,&stcGpioInit);
		
	DI_OFF;
	stcGpioInit.u32Mode = GPIO_MODE_OUTPUT_PP;
    stcGpioInit.u32Pin  = DI_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_NONE;
    GPIO_Init(DI_PORT,&stcGpioInit);

	// ems 相关脚位=============
	stcGpioInit.u32Mode = GPIO_MODE_OUTPUT_PP;
    stcGpioInit.u32Pin  = PWM_EMS1_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_NONE;
    GPIO_Init(PWM_EMS1_PORT,&stcGpioInit);

	EMS1_PWM_N_OFF;
	stcGpioInit.u32Mode = GPIO_MODE_OUTPUT_PP;
    stcGpioInit.u32Pin  = EMS1_PWM_N_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_NONE;
    GPIO_Init(EMS1_PWM_N_PORT,&stcGpioInit);
		
	EMS1_PWM_P_OFF;
	stcGpioInit.u32Mode = GPIO_MODE_OUTPUT_PP;
    stcGpioInit.u32Pin  = EMS1_PWM_P_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_NONE;
    GPIO_Init(EMS1_PWM_P_PORT,&stcGpioInit);

	EMS2_PWM_N_OFF;
	stcGpioInit.u32Mode = GPIO_MODE_OUTPUT_PP;
    stcGpioInit.u32Pin  = EMS2_PWM_N_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_NONE;
    GPIO_Init(EMS2_PWM_N_PORT,&stcGpioInit);
		
	EMS2_PWM_P_OFF;
	stcGpioInit.u32Mode = GPIO_MODE_OUTPUT_PP;
    stcGpioInit.u32Pin  = EMS2_PWM_P_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_NONE;
    GPIO_Init(EMS2_PWM_P_PORT,&stcGpioInit);

		
	//------------按键----------------
	stcGpioInit.u32Mode = GPIO_MODE_INPUT_TTL;
    stcGpioInit.u32Pin  = K1_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_UP;
    GPIO_Init(K1_PORT,&stcGpioInit);
		
//		stcGpioInit.u32Mode = GPIO_MODE_INPUT_TTL;
//    stcGpioInit.u32Pin  = EMS_ISEN_PIN;
//    stcGpioInit.u32Pull = GPIO_PULL_NONE;
//    GPIO_Init(EMS_ISEN_PORT,&stcGpioInit);

	stcGpioInit.u32Mode = GPIO_MODE_INPUT | GPIO_MODE_EXTI;
    stcGpioInit.u32Pin  = K2_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_UP;
	stcGpioInit.u32ExtI = GPIO_EXTI_FALLING;
    GPIO_Init(K2_PORT,&stcGpioInit);
		
	EnableNvic(PORTA_IRQn, IrqLevel1, TRUE);
	EnableNvic(PORTD_IRQn, IrqLevel3, TRUE);

	stcGpioInit.u32Mode = GPIO_MODE_INPUT_TTL;
    stcGpioInit.u32Pin  = K3_PIN;
    stcGpioInit.u32Pull = GPIO_PULL_UP;
    GPIO_Init(K3_PORT,&stcGpioInit);
}

void PortD_IRQHandler(void)
{
		if(USB_IN_PIN | GPIO_ExtIrqStateGet(USB_IN_PORT,USB_IN_PIN))
		{
				GPIO_ExtIrqStateClear(USB_IN_PORT,USB_IN_PIN);
		}
		
}

void PortA_IRQHandler(void)
{
		if(K2_PIN | GPIO_ExtIrqStateGet(K2_PORT,K2_PIN)|RX_PIN | GPIO_ExtIrqStateGet(RX_PORT,RX_PIN))
		{
				GPIO_ExtIrqStateClear(K2_PORT,K2_PIN);
				GPIO_ExtIrqStateClear(RX_PORT,RX_PIN);
		}

}

